package ucla.encuestaMatic.vista.ventanas;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;

import ucla.encuestaMatic.controlador.interfaces.IServicioAdministracionDefinicionEncuesta;
import ucla.encuestaMatic.modelo.beans.RespuestaCerrada;
import ucla.encuestaMatic.modelo.data.Encuesta;
import ucla.encuestaMatic.modelo.data.Pregunta;
import ucla.encuestaMatic.modelo.data.pk.EncuestaPersonaId;

import com.obelisco.vista.componentes.ComponenteDatosListener;
import com.obelisco.vista.componentes.ListaBase;
import com.obelisco.vista.componentes.TipoFuncion;
import com.obelisco.vista.controles.BindingDateField;
import com.obelisco.vista.controles.BindingTextArea;
import com.obelisco.vista.controles.BindingTextField;
import com.obelisco.vista.controles.BotonFuncion;
import com.obelisco.vista.controles.Grid;
import com.obelisco.vista.controles.Label;
import com.obelisco.vista.controles.SelectField;
import com.obelisco.vista.plantillas.VentanaBase;

import nextapp.echo2.app.Column;
import nextapp.echo2.app.Component;
import nextapp.echo2.app.ContentPane;
import nextapp.echo2.app.Extent;
import nextapp.echo2.extras.app.layout.TabPaneLayoutData;

public class PaneDefinicionEncuesta extends ContentPane implements ComponenteDatosListener {

	private Encuesta encuesta;
	private IServicioAdministracionDefinicionEncuesta servicioAdministracionDefinicionEncuesta;
	
	// Primer Tab
	private BindingTextField txtNombre;
	private BindingTextArea txtDescripcion;
	private SelectField cmbAnonima;
	private BindingDateField txtFechaInicio;
	private BindingDateField txtFechaFin;
	// Segundo Tab
	private ListaBase lstPreguntas;
	
	
	public void onCancelar() {
		// TODO Auto-generated method stub
		
	}

	public void onConfirmarCambios(Object objeto, TipoFuncion tipo, String nombre) {
		// TODO Auto-generated method stub
		if (this.cmbAnonima.getSelectedItem() != null) {
			this.encuesta.setAnonima(((RespuestaCerrada)this.cmbAnonima.getSelectedItem()).getId().toString());
		}
		this.servicioAdministracionDefinicionEncuesta.guardarEncuesta(this.encuesta);
	}

	public void onConfirmarEliminacion(Object object) {
		// TODO Auto-generated method stub
		
	}

	public void onConsultar(Object objeto) {
		// TODO Auto-generated method stub
		this.onModificar(objeto);
		this.setEnabled(false);
	}

	public void onCrear() {
		// TODO Auto-generated method stub
		
	}

	public void onFuncionPersonalizada(Object objeto, TipoFuncion funcion, String nombre) {
		// TODO Auto-generated method stub
		
	}

	public void onIncluir(Object objeto) {
		// TODO Auto-generated method stub
		
	}

	public void setEnabled(boolean valor) {
		for (int i=0; i<((VentanaBase)this.ventanaPadre).getAreaTrabajo().getComponentCount(); i++) {
			Component component = ((VentanaBase)this.ventanaPadre).getAreaTrabajo().getComponent(i);
			// Chequeamos que el componente es la ListaBase 
			if (component instanceof ListaBase) {
				// Revisamos los botones de funciones 
				for (Iterator iter=((ListaBase)component).getBarraHerramientas().getFunciones().iterator(); iter.hasNext(); ) {
					BotonFuncion botonFuncion = (BotonFuncion)iter.next();
					botonFuncion.setEnabled(valor);
					// Si es el boton de Consultar siempre lo dejamos habilitado
					if (botonFuncion.getTipoFuncion() == TipoFuncion.BUSCAR) {
						botonFuncion.setEnabled(true);
					}
				}
			}			
			else {
				component.setEnabled(valor);
			}
		}
	}
	
	private ListaBase configurarSegundoTab() {
		TabPaneLayoutData columnLayoutData = new TabPaneLayoutData();
		columnLayoutData.setTitle("Preguntas");
		this.lstPreguntas.setLayoutData(columnLayoutData);		
		return this.lstPreguntas;
	}
	
	private Column configurarPrimerTab() {
		Grid grid = new Grid();
		grid.setStyleName("Obelisco.GridPaneDialogo");
		grid.setSize(2);
		grid.setColumnWidth(0, new Extent(150, Extent.PX)); //PX denota pixeles						
		
		grid.add(new Label("Nombre"));
		this.txtNombre = new BindingTextField(250);
		this.txtNombre.setMaximumLength(50);
		grid.add(this.txtNombre);
		
		grid.add(new Label("Descripcion"));
		this.txtDescripcion = new BindingTextArea(250,50);
		this.txtDescripcion.setMaximumLength(250);
		grid.add(this.txtDescripcion);
		
		grid.add(new Label("Anonima"));
		this.cmbAnonima = new SelectField(50);		
		grid.add(this.cmbAnonima);
		
		grid.add(new Label("Fecha de Inicio"));
		this.txtFechaInicio = new BindingDateField(100);
		grid.add(this.txtFechaInicio);
		
		grid.add(new Label("Fecha de Fin"));
		this.txtFechaFin = new BindingDateField(100);
		grid.add(this.txtFechaFin);
		
		Column columna = new Column();
		TabPaneLayoutData columnLayoutData = new TabPaneLayoutData();
		columnLayoutData.setTitle("Encuesta");
		columna.setLayoutData(columnLayoutData);
		columna.add(grid);
		return columna;
	}
	
	private void cargarCombosYListas() {
		this.cmbAnonima.setItemDefectoActivado(false);
		this.cmbAnonima.inicializarDatos(RespuestaCerrada.getRespuestasCerradas(), "nombre", "id");
		this.lstPreguntas.inicializarTabla(this.encuesta.getPreguntas());
		List parametros = new ArrayList();
		parametros.add(this.encuesta);
		this.lstPreguntas.setListaParametros(parametros);
	}
	
	private void setBindings() {
		this.txtNombre.setBinding(this.encuesta, "nombre");
		this.txtDescripcion.setBinding(this.encuesta, "descripcion");
		this.txtFechaInicio.setBinding(this.encuesta, "fechaInicio");
		this.txtFechaFin.setBinding(this.encuesta, "fechaFin");
	}
	
	private Component ventanaPadre = null;
	private void initComponents() {
		if(ventanaPadre == null) {
			ventanaPadre = this.getParent();
			while (!(ventanaPadre instanceof VentanaBase)) {
				ventanaPadre = ventanaPadre.getParent();
			}
		}
		((VentanaBase)ventanaPadre).getAreaTrabajo().removeAll();
		((VentanaBase)ventanaPadre).getAreaTrabajo().add(this.configurarPrimerTab());
		((VentanaBase)ventanaPadre).getAreaTrabajo().add(this.configurarSegundoTab());
		this.setEnabled(true);
	}
	
	public void onInicializar() {
		// TODO Auto-generated method stub
		this.initComponents();
		this.setBindings();
		this.cargarCombosYListas();
	}

	public void onListaParametros(List listaParametros) {
		// TODO Auto-generated method stub
		
	}

	public void onModificar(Object objeto) {
		// TODO Auto-generated method stub
		this.cmbAnonima.setSelectedItemPorId(this.encuesta.getAnonima());
		
	}

	public void onObjetoEntidad(Object objeto) {
		// TODO Auto-generated method stub
		this.encuesta = (Encuesta)objeto;
	}

	public boolean onValidarDatos(Object objeto, TipoFuncion tipo, String nombre) {
		// TODO Auto-generated method stub
		return true;
	}

	
	// Getter y Setter
	public IServicioAdministracionDefinicionEncuesta getServicioAdministracionDefinicionEncuesta() {
		return servicioAdministracionDefinicionEncuesta;
	}

	public void setServicioAdministracionDefinicionEncuesta(
			IServicioAdministracionDefinicionEncuesta servicioAdministracionDefinicionEncuesta) {
		this.servicioAdministracionDefinicionEncuesta = servicioAdministracionDefinicionEncuesta;
	}

	public ListaBase getLstPreguntas() {
		return lstPreguntas;
	}

	public void setLstPreguntas(ListaBase lstPreguntas) {
		this.lstPreguntas = lstPreguntas;
	}
}
